package com.gzq.singleton.exam00;

import java.io.Serializable;

/**
 * 饿汉式——静态常量实现。
 */
public class EhStaticCodeBlock implements Serializable {
    // §. 由本来自己创建一个实例，存放在静态常量中。
    private static final EhStaticCodeBlock singleton;

    private String name;

    static{
        singleton = new EhStaticCodeBlock();
        singleton.name = "静态代码块单例模式";
    }

    // §. 私有化构造器。放置外部通过new创建对象。
    private EhStaticCodeBlock() {
        /*
           防治单例模式的被反射入侵示例代码。
         */
        synchronized (EhStaticCodeBlock.class) {
            if (singleton != null) {
                throw new RuntimeException("静态代码块单例模式被入侵！");
            }
        }
    }

    // 3. 提供一个公共静态方法，返回唯一的实例。
    public static EhStaticCodeBlock getSingleton() {
        return singleton;
    }

    /**
     * 防止序列化当单例可以被序列化时，使用此防范可以解决单例模式被序列化入侵的问题。
     */
    private Object readResolve() {
        return singleton;
    }

}
